home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 65.zip / BS1 part 65 / DevPac v3.02b.adf / include / exec / lists.i < prev    next >
Text File  |  1991-11-20  |  3KB  |  154 lines

  1.     IFND    EXEC_LISTS_I
  2. EXEC_LISTS_I    SET    1
  3. **
  4. **    $Filename: exec/lists.i $
  5. **    $Release: 1.3 $
  6. **
  7. **    
  8. **
  9. **    (C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
  10. **        All Rights Reserved
  11. **
  12.  
  13.     IFND EXEC_NODES_I
  14.     INCLUDE "exec/nodes.i"
  15.     ENDC    ; EXEC_NODES_I
  16.  
  17.  
  18. *---------------------------------------------------------------------
  19. *
  20. *   List Structures
  21. *
  22. *---------------------------------------------------------------------
  23.  
  24. ; normal, full featured list
  25.  STRUCTURE  LH,0
  26.     APTR    LH_HEAD
  27.     APTR    LH_TAIL
  28.     APTR    LH_TAILPRED
  29.     UBYTE   LH_TYPE
  30.     UBYTE   LH_pad
  31.     LABEL   LH_SIZE
  32.  
  33. ; minimal list, no type checking possible
  34.  STRUCTURE  MLH,0
  35.     APTR    MLH_HEAD
  36.     APTR    MLH_TAIL
  37.     APTR    MLH_TAILPRED
  38.     LABEL   MLH_SIZE
  39.  
  40.  
  41. NEWLIST        MACRO   * list
  42.         MOVE.L  \1,(\1)
  43.         ADDQ.L  #LH_TAIL,(\1)
  44.         CLR.L   LH_TAIL(\1)
  45.         MOVE.L  \1,(LH_TAIL+LN_PRED)(\1)
  46.         ENDM
  47.  
  48. TSTLIST        MACRO   * [list]
  49.         IFC        '\1',''
  50.         CMP.L   LH_TAIL+LN_PRED(A0),A0
  51.         ENDC
  52.         IFNC    '\1',''
  53.         CMP.L   LH_TAIL+LN_PRED(\1),\1
  54.         ENDC
  55.         ENDM
  56.  
  57. SUCC        MACRO   * node,succ
  58.         MOVE.L  (\1),\2
  59.         ENDM
  60.  
  61. PRED        MACRO   * node,pred
  62.         MOVE.L  LN_PRED(\1),\2
  63.         ENDM
  64.  
  65. IFEMPTY        MACRO   * list,label
  66.         CMP.L   LH_TAIL+LN_PRED(\1),\1
  67.         BEQ        \2
  68.         ENDM
  69.  
  70. IFNOTEMPTY  MACRO   * list,label
  71.         CMP.L   LH_TAIL+LN_PRED(\1),\1
  72.         BNE        \2
  73.         ENDM
  74.  
  75. TSTNODE        MACRO   * node,next
  76.         MOVE.L  (\1),\2
  77.         TST.L   (\2)
  78.         ENDM
  79.  
  80. NEXTNODE    MACRO   * next,current,exit_label (DX,AX,DISP16)
  81.         MOVE.L  \1,\2
  82.         MOVE.L  (\2),\1
  83.         IFC        '\0',''
  84.         BEQ        \3
  85.         ENDC
  86.         IFNC    '\0',''
  87.         BEQ.S   \3
  88.         ENDC
  89.         ENDM
  90.  
  91. ADDHEAD        MACRO
  92.         MOVE.L  (A0),D0
  93.         MOVE.L  A1,(A0)
  94.         MOVEM.L D0/A0,(A1)
  95.         MOVE.L  D0,A0
  96.         MOVE.L  A1,LN_PRED(A0)
  97.         ENDM
  98.  
  99. ADDTAIL        MACRO
  100.         LEA        LH_TAIL(A0),A0
  101.         MOVE.L  LN_PRED(A0),D0
  102.         MOVE.L  A1,LN_PRED(A0)
  103.         MOVE.L  A0,(A1)
  104.         MOVE.L  D0,LN_PRED(A1)
  105.         MOVE.L  D0,A0
  106.         MOVE.L  A1,(A0)
  107.         ENDM
  108.  
  109. REMOVE        MACRO
  110.         MOVE.L  (A1),A0
  111.         MOVE.L  LN_PRED(A1),A1
  112.         MOVE.L  A0,(A1)
  113.         MOVE.L  A1,LN_PRED(A0)
  114.         ENDM
  115.  
  116. REMHEAD        MACRO
  117.         MOVE.L  (A0),A1
  118.         MOVE.L  (A1),D0
  119.         BEQ.S   REMHEAD\@
  120.         MOVE.L  D0,(A0)
  121.         EXG.L   D0,A1
  122.         MOVE.L  A0,LN_PRED(A1)
  123. REMHEAD\@
  124.         ENDM
  125.  
  126. *----------------------------------------------------------------
  127. *
  128. *  REMHEADQ -- remove-head quickly
  129. *
  130. *    Useful when a scratch register is available, and
  131. *    list is known to contain at least one node.
  132. *
  133. *----------------------------------------------------------------
  134.  
  135. REMHEADQ    MACRO   * head,node,scratchReg
  136.         MOVE.L  (\1),\2
  137.         MOVE.L  (\2),\3
  138.         MOVE.L  \3,(\1)
  139.         MOVE.L  \1,LN_PRED(\3)
  140.         ENDM
  141.  
  142. REMTAIL        MACRO
  143.         MOVE.L  LH_TAIL+LN_PRED(A0),A1
  144.         MOVE.L  LN_PRED(A1),D0
  145.         BEQ.S   REMTAIL\@
  146.         MOVE.L  D0,LH_TAIL+LN_PRED(A0)
  147.         EXG.L   D0,A1
  148.         MOVE.L  A0,(A1)
  149.         ADDQ.L  #4,(A1)
  150. REMTAIL\@
  151.         ENDM
  152.  
  153.     ENDC    ; EXEC_LISTS_I
  154.